home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / dev / misc / flexcat1_3.lha / flexcat / doc / FlexCat_deutsch.doc < prev    next >
Encoding:
Text File  |  1994-07-08  |  43.9 KB  |  1,033 lines

  1. FlexCat V1.3 Dokumentation
  2. **************************
  3.  
  4.    Diese Datei beschreibt den Umgang mit FlexCat V1.3, einem Programm
  5. zur Erzeugung von Catalogs und dem sie verwendenden Quelltext.  FlexCat
  6. arbeitet wie CatComp oder KitCat, kann aber praktisch beliebigen
  7. Quelltext erzeugen. Dies funktioniert durch sogenannte
  8. Source-description-Dateien, die gewissermaßen eine Vorlage für
  9. den zu erzeugenden Quelltext darstellen. Sie können mit einem Editor
  10. bearbeitet und verändert werden und dadurch hoffentlich an beliebige
  11. Programmiersprachen und Bedürfnisse angepaßt werden.
  12.  
  13. Copyright und andere rechtliche Dinge
  14. *************************************
  15.  
  16.      Copyright (C) 1993    Jochen Wiedmann
  17.                  Am Eisteich 9
  18.                72555 Metzingen (Deutschland)
  19.                  Tel. 07123 / 14881
  20.                  Internet: wiedmann@mailserv.zdv.uni-tuebingen.de
  21.  
  22.    Diese Dokumentation sowie das gesamte Programmpaket dürfen im
  23. Rahmen der "GNU General Public License" kopiert, verändert und
  24. weitergegeben werden solange diese Copyright-Notiz und diese Erlaubnis
  25. unverändert auf allen Kopien enthalten ist und die "GNU General Public
  26. License" der Free Software Foundation (in der Datei COPYING)
  27. mitkopiert und weitergegeben wird.
  28.  
  29.    Es wird keine Garantie gegeben, daß die Programme, die in dieser
  30. Dokumentation beschrieben werden, 100%ig zuverlässig sind. Sie
  31. benutzen diese Programme auf eigene Gefahr. Der Autor kann auf
  32. keinen Fall für irgendwelche Schäden verantwortlich gemacht
  33. werden, die durch die Anwendung dieser Programme entstehen.
  34.  
  35. Übersicht
  36. *********
  37.  
  38.    Seit der Workbench 2.1 bietet der Amiga ein sehr schönes System an,
  39. mit dem Programme in verschiedenen, praktisch beliebigen Sprachen
  40. benutzt werden können: Die locale.library. (Man nennt diesen Vorgang
  41. Lokalisierung, daher der Name.)
  42.  
  43.    Die Idee ist eigentlich recht simpel: Man wählt eine Sprache, meist
  44. die englische aus und schreibt sein Programm ganz normal, abgesehen
  45. davon, daß Strings nicht mehr direkt eingegeben werden, sondern über
  46. einen Funktionsaufruf im Programm verwendet werden. Durch einen weiteren
  47. Funktionsaufruf zu Beginn des Programms erhält der Benutzer nun die
  48. Möglichkeit, anstelle der vorgegebenen Strings andere zu wählen, die in
  49. einer externen Datei, einem sogenannten Katalog enthalten sind.
  50.  
  51.    Diese Katalogdateien sind vom Programm unabhängig. Möchte man das
  52. Programm in einer weiteren Sprache betreiben, so ist lediglich eine
  53. neue Katalogdatei zu erzeugen, das eigentliche Programm muß nicht
  54. geändert werden.
  55.  
  56.    Auf den Programmierer kommen dadurch aber zusätzliche Aufgaben
  57. hinzu: Es müssen die Kataloge erzeugt werden, die Strings nach wie vor
  58. eingegeben werden und es muß zusätzlicher Code erzeugt werden, der
  59. die Behandlung der Kataloge übernimmt. Dies soll durch FlexCat so weit
  60. wie möglich vereinfacht und automatisiert werden, ohne dabei auf
  61. Flexibilität (vor allem in Bezug auf den erzeugten Quelltext) zu
  62. verzichten. Betrachten wir als Beispiel ein Programm
  63. HelloLocalWorld.c. Das Programm wird letzten Endes so aussehen:
  64.          #include <stdio.h>
  65.          #include <stdlib.h>
  66.          #include <HelloLocalWorld_Cat.h>    /* Muß eingebunden werden! */
  67.          #include <clib/exec_protos.h>
  68.      
  69.          struct Library *LocaleBase;
  70.      
  71.          void main(int argc, char *argv[])
  72.          { /*  Die Library muß hier eröffnet werden, auch wenn der Compiler  */
  73.            /*  das automatisch kann. Kein Aussteigen, falls die    */
  74.            /*  Library nicht eröffnet werden kann: Dann werden einfach die    */
  75.            /*  eingebauten Strings verwendet.                */
  76.            LocaleBase = OpenLibrary("locale.library", 38);
  77.      
  78.            OpenHelloLocalWorldCatalog(NULL, NULL);
  79.      
  80.            printf("%s\n", GetHelloLocalWorldString(msgHello));
  81.      
  82.            CloseHelloLocalWorldCatalog();
  83.            if (LocaleBase)
  84.            CloseLibrary(LocaleBase);
  85.          }
  86.  
  87. Beachten Sie, daß dies dem originalen HelloWorld.c fast völlig
  88. entspricht, abgesehen davon, daß der String "Hello, world!" durch einen
  89. Funktionsaufruf ersetzt wird und etwas zusätzlichem
  90. Initialisierungsaufwand.
  91.  
  92.    Das obige Programm verwendet eine Konstante msgHello. Ein Aufruf der
  93. Funktion GetHelloLocalWorldString() ersetzt diese Konstante durch den
  94. entsprechenden String. Man beginnt stets damit, diese Konstanten und
  95. Strings in einer sogenannten Katalogbeschreibung abzulegen. Siehe
  96. Catalog description. Unsere Katalogbeschreibung würde in einer Datei
  97. HelloLocalWorld.cd stehen und so aussehen:
  98.          ;    Kommentare sind natürlich erlaubt! Jede mit einem Semikolon
  99.          ;    beginnende Zeile ist eine Kommentarzeile.
  100.          ;
  101.          ;    Die Sprache der eingebauten Strings:
  102.          #language english
  103.          ;
  104.          ;    Die für den Aufruf von Locale/OpenCatalog() verwendete
  105.          ;    Versionsnummer. Dies ist anders als bei Exec/OpenLibrary():
  106.          ;    0 bedeutet beliebige Version, andere Nummern müssen exakt
  107.          ;    stimmen!
  108.          #version 0
  109.          ;
  110.          ;    Dies definiert einen String und die ID unter der er verwendet
  111.          ;    wird. Die Zahl 4 gibt an, daß der String wenigstens 4 Zeichen
  112.          ;    enthalten sollte.
  113.          msgHello (/4/)
  114.          Hello, world!
  115.  
  116.    Mit FlexCat erzeugt man ais der Katalogbeschreibung zwei andere
  117. Dateien: Das Includefile HelloLocalWorld_Cat.h definiert die
  118. Konstanten, die Datei HelloLocalWorld_Cat.c enthält ein Array mit
  119. den Strings sowie die Funktionen OpenHelloLocalWorldCatalog(),
  120. GetHelloLocalWorldCatalog() und CloseHelloLocalWorldCatalog().
  121. Wie diese genau aussehen, ist unerheblich. Insbesondere benötigt man
  122. keinerlei Kenntnisse der Locale.library!
  123.  
  124.    Allerdings könnten Sie neugierig sein, wie diese Dateien aussehen
  125. oder sogar ein anderes Aussehen wünschen. Hier liegt der Unterschied
  126. zwischen FlexCat und anderen Kataloggeneratoren: Bei FlexCat ist kein
  127. bestimmtes Format vorgeschrieben. Mit Hilfe der sogenenannten
  128. Quelltextbeschreibungen können Sie praktisch beliebige Formate
  129. vorgeben. Damit könnten z.B. auch unter AmigaDOS 2.0 Kataloge
  130. verwendet werden. Siehe Source description.  Solche
  131. Katalogbeschreibungen sind bei FlexCat bereits mitgeliefert werden.
  132. Damit kann man die Quelltexte folgendermaßen erzeugen:
  133.          FlexCat HelloLocalWorld.cd HelloLocalWorld_Cat.c=C_c_V21
  134.          FlexCat HelloLocalWorld.cd HelloLocalWorld_Cat.h=C_h.sd
  135.  
  136.    Wenn das Programm fertig ist, dann wird FlexCat erneut verwendet, um
  137. sogenannte Katalogübersetzungen zu erzeugen, eine für jede weitere
  138. Sprache außer der eingebauten. Siehe Catalog translation. Erzeugen wir
  139. also eine deutsche Katalogübersetzung:
  140.          FlexCat HelloLocalWorld.cd NEWCTFILE Deutsch.ct
  141.  
  142. Die fertige Datei sieht dann so aus:
  143.          ## version
  144.          ## language
  145.          ## codeset 0
  146.          ;    Kommentare sind natürlich erlaubt! Jede mit einem Semikolon
  147.          ;    beginnende Zeile ist eine Kommentarzeile.
  148.          ;
  149.          ;    Die Sprache der eingebauten Strings:
  150.          ;
  151.          ;    Die für den Aufruf von Locale/OpenCatalog() verwendete
  152.          ;    Versionsnummer. Dies ist anders als bei Exec/OpenLibrary():
  153.          ;    0 bedeutet beliebige Version, andere Nummern müssen exakt
  154.          ;    stimmen!
  155.          ;
  156.          ;    Dies definiert einen String und die ID unter der er verwendet
  157.          ;    wird. Die Zahl 4 gibt an, daß der String wenigstens 4 Zeichen
  158.          ;    enthalten sollte.
  159.          msgHello
  160.      
  161.          ;Hello, world!
  162.  
  163. Dies sieht der Katalogbeschreibung sehr ähnlich. FlexCat übernimmt
  164. dabei die Kommentare, auch dort wo es nutzlos ist: Z.B. ist der
  165. Kommentar zur Länge der Strings hier bedeutungslos, da diese bereits
  166. in der Katalogbeschreibung angegeben werden muß. Man muß nun
  167. lediglich die Lücken füllen, d.h. die Sprache (language, hier
  168. Deutsch), die Version (einen typischen Versionsstring, $VER:
  169. Deutsch.catalog (11.03.94) wäre z.B. gut möglich) und den codeset
  170. (hier 0, siehe Locale/OpenCatalog() für Details) sowie natürlich die
  171. übersetzten Strings selber. FlexCat erleichtert dies, indem die
  172. originalen Strings jeweils als Kommentare eingefügt werden.
  173.  
  174.    Schließlich werden daraus die eigentlichen Kataloge erzeugt:
  175.          FlexCat HelloLocalWorld.cd Deutsch.ct CATALOG Deutsch.catalog
  176.  
  177. Beachten Sie, daß man dazu weder das Programm noch die Quelltexte
  178. benötigt.  Dies kann also ohne weiteres später geschehen, etwa um
  179. nachträglich weitere Sprachen zu unterstützen. Es ist üblich und
  180. durchaus erwünscht, eine Datei NewCatalog.ct mitzuliefern, die das
  181. Erstellen eigener Kataloge erlaubt.
  182.  
  183.    Aber was geschieht, wenn das Programm später geändert oder
  184. erweitert wird?  Dann muß nur die Katalogbeschreibung geändert
  185. werden. Mit Hilfe von FlexCat können die Katalogübersetzungen auf den
  186. neuesten Stand gebracht werden:
  187.          FlexCat HelloLocalWorld.cd Deutsch.ct NEWCTFILE Deutsch.ct
  188.  
  189. Es müssen dann lediglich noch evtl. neue Strings eingegeben werden.
  190.  
  191. Installation des Programms
  192. **************************
  193.  
  194.    FlexCat ist in Ansi-C geschrieben und sollte daher auf jedem Amiga
  195. und nach evtl. Neucompilierung sogar auf jedem anderen Rechner laufen.
  196. Das gilt ebenso für die erzeugten Programme, denn FlexCat ist mit sich
  197. selbst erzeugt worden. Die mitgelieferten Quelltextbeschreibungen
  198. sollten Programme erzeugen, die auf jedem Amiga und sogar auf
  199. beliebigen Rechnern lauffähig sind. (Allerdings sollte man dann beim
  200. Aufruf der FlexCat-Funktionen sicherstellen, daß die Variable
  201. LocaleBase den Wert NULL hat. Lokalisierung ist aber meist nur auf dem
  202. Amiga und ab der Workbench 2.1 möglich, da erst dann die
  203. locale.library zur Verfügung steht.
  204.  
  205.    Es ist aber prinzipiell durchaus möglich, auch unter einer früheren
  206. Workbench oder gar auf anderen Rechnern Lokalisierung anzubieten: Ein
  207. Beispiel dafür liefert Quelltextbeschreibungsdateien C_c_V20.sd, in
  208. der die locale.library durch die iffparse.library ersetzt wird,
  209. falls letztere vorhanden ist, erstere dagegen nicht. Damit ist
  210. Lokalisierung schon ab der Workbench 2.0 möglich.  Siehe C.
  211.  
  212.    Zur Installation ist nichts weiter zu tun, als das eigentliche
  213. Programm an eine sinnvolle Stelle Ihres Suchpfades zu kopieren und
  214. einen geeigneten Platz für die Quelltextbeschreibungen auszuwählen.
  215. Falls Sie mit einer anderen als der englischen Sprache arbeiten wollen,
  216. müssen Sie außerdem den entsprechenden Katalog an eine geeignete
  217. Stelle kopieren. Im Falle der deutschen Sprache wäre dies
  218. Catalogs/Deutsch/FlexCat.catalog.  Der einfachste Platz ist das
  219. Verzeichnis Locale:Catalogs/Deutsch, möglich ist aber auch, einfach
  220. das ganze Verzeichnis Catalogs in das Directory des Programms zu
  221. kopieren. Siehe Benutzung.
  222.  
  223. Aufruf des Programms
  224. ********************
  225.  
  226.    FlexCat arbeitet nur vom CLI aus. Die Aufrufsyntax ist
  227.  
  228.          FlexCat CDFILE/A,CTFILE,CATALOG/K,NEWCTFILE/K,SOURCES/M
  229.  
  230.    Dies ist die Bedeutung der Argumente:
  231. CDFILE
  232.      ist der (obligatorische) Name einer zu lesenden
  233.      Katalogbeschreibung.  Aus diesem Argument wird auch der Basisname
  234.      bei der Quelltextbeschreibung gewonnen. Achten Sie deshalb auf
  235.      Groß-/Kleinschreibung!  Siehe Source description.
  236.  
  237. CTFILE
  238.      ist der Name einer Katalogübersetzung, die etwa für die
  239.      Erzeugung eines Katalogs zu lesen ist. Außerdem kann man eine
  240.      vorhandene Katalogübersetzung mit Hilfe des Argumentes NEWCTFILE
  241.      auf den neuesten Stand zu bringen: Wird beides angegeben, so wird
  242.      zunächst die Katalogbeschreibung und dann die -übersetzung
  243.      gelesen und anschließend eine neue Katalogübersetzung erzeugt,
  244.      die dieselben Strings wie die alte und evtl. neue Strings (als
  245.      Leerzeile) enthält.
  246.  
  247. CATALOG
  248.      ist der Name eines zu erzeugenden Kataloges. Dieses Argument ist
  249.      nur gemeinsam mit CTFILE erlaubt.
  250.  
  251. NEWCTFILE
  252.      ist der Name einer neu zu erzeugenden Katalogübersetzung. Wie
  253.      schon gesagt, werden die Strings aus einer evtl. durch CTFILE
  254.      angegebenen bestehenden Datei übernommen. Fehlt das Argument
  255.      CTFILE, so wird eine Datei erzeugt, die nur Leerzeilen als Strings
  256.      enthält.
  257.  
  258. SOURCES
  259.      sind die Namen zu erzeugender Quelltextdateien sowie der dazu zu
  260.      lesenden Quelltextbeschreibungen. Diese Argumente müssen die Form
  261.      source=template haben, wobei source der Name der zu
  262.      erzeugenden Quelltextdatei und template der Name der
  263.      Quelltextbeschreibungsdatei ist.
  264.  
  265.    Für Beispiele siehe Uebersicht.
  266.  
  267. Aufbau einer Katalogbeschreibung
  268. ********************************
  269.  
  270.    Eine Katalogbeschreibungsdatei enthält vier Arten von Zeilen.
  271.  
  272. Kommentarzeilen
  273.      Jede mit einem Semikolon beginnende Zeile ist eine Kommentarzeile,
  274.      wird also von FlexCat ignoriert. (Eine Ausnahme sind die unten
  275.      beschriebenen Stringzeilen, die sehr wohl mit einem Semikolon
  276.      beginnen dürfen.)
  277.  
  278. Kommandozeilen
  279.      Mit einem '#' beginnende Zeilen enthalten ein Kommando. Mögliche
  280.      Kommandos sind (Groß-/Kleinschreibung wird ignoriert):
  281.     #language <str>
  282.           gibt die Vorgabesprache des Programms an, d.h. die Sprache
  283.           der Strings in der Katalogbeschreibungsdatei. Vorgabe ist
  284.           #language english.
  285.  
  286.     #version <num>
  287.           gibt die Versionsnummer der zu eröffnenden Kataloge an. Im
  288.           Unterschied zu Exec/OpenLibrary muß die Nummer genau
  289.           stimmen, höhere Nummern werden nicht akzeptiert. Eine
  290.           Ausnahme ist es, hier die 0 als Versionsnummer anzugeben,
  291.           durch die jeder Katalog akzeptiert wird. Vorgabe ist
  292.           #version 0. Zu diesen Befehlen siehe auch
  293.           Locale/OpenCatalog.
  294.  
  295.     #lengthbytes <num>
  296.           Weist das Programm an, vor jeden String die angegebene Zahl
  297.           von Bytes zu schreiben, die die Länge des Strings (ohne die
  298.           lengthbytes) enthalten und ohne abschließendes NUL-Byte
  299.           angeben. (Ein NUL-Byte wird in Katalogen aber trotzdem
  300.           angehängt, im erzeugten Quelltext ist dies von der
  301.           Quelltextbeschreibungsdatei abhängig.) <num> muß zwischen
  302.           0 und sizeof(long)=4 liegen. Vorgabe ist #lengthbytes 0.
  303.  
  304.     #basename <str>
  305.           Setzt den Basisnamen für die Quelltextbeschreibung. Der aus
  306.           den Argumenten beim Aufruf des Programmnamens gewonnene
  307.           Basisname (siehe Programmstart) wird überschrieben. Siehe
  308.           Source description.
  309.  
  310. Beschreibungszeilen
  311.      deklarieren einen String. Sie haben die Form IDSTR
  312.      (id/minlen/maxlen), wobei IDSTR ein Bezeichner ist (d.h. ein
  313.      aus den Zeichen a-z,A-Z,0-9 und dem Underscore bestehender
  314.      String), id eine eindeutige Nummer (die von jetzt an als ID
  315.      bezeichnet wird) angibt, minlen die minimale und maxlen die
  316.      maximale Länge des Strings. Die drei letztgenannten dürfen auch
  317.      fehlen, das Programm wählt dann selbst einen Wert für id und
  318.      erlaubt Strings beliebiger Länge. Die auf eine Beschreibungszeile
  319.      folgende ist eine
  320.  
  321. Stringzeile,
  322.      d.h. sie enthält den eigentlichen String und nichts anderes.
  323.      Dieser darf eine Reihe von Steuerzeichen enthalten, die alle durch
  324.      einen Backslash eingeleitet werden:
  325.     \b
  326.           Backspace (Ascii 8)
  327.  
  328.     \c
  329.           Control Sequence Introducer (Ascii 155)
  330.  
  331.     \e
  332.           Escape (Ascii 27)
  333.  
  334.     \f
  335.           Form Feed (Ascii 12)
  336.  
  337.     \g
  338.           Display beep (Ascii 7)
  339.  
  340.     \n
  341.           Line Feed, newline (Ascii 10)
  342.  
  343.     \r
  344.           Carriage Return (Ascii 13)
  345.  
  346.     \t
  347.           Tab (Ascii 9)
  348.  
  349.     \v
  350.           Vertical tab (Ascii 11)
  351.  
  352.     \)
  353.           Das Klammer-Zu-Zeichen. (Dies ist evtl. innerhalb einer
  354.           %(..)-Sequenz nötig, siehe Source description.)
  355.  
  356.     \\
  357.           Der Backslash selbst.
  358.  
  359.     \xHH
  360.           Das durch HH gegebene Ascii-Zeichen, wobei HH Hexziffern
  361.           sind.
  362.  
  363.     \OOO
  364.           Das durch OOO gegebene Ascii-Zeichen, wobei OOO
  365.           Hexziffern sind.  Schließlich signalisiert ein einzelner
  366. Backslash am Zeilenende, daß die Zeile (und damit der String) auf der
  367. nächsten Zeile fortgesetzt wird.  Es ist dadurch möglich, beliebig
  368. lange Strings zu definieren. (FlexCat ist lediglich durch das
  369. verfügbare RAM eingeschränkt.)
  370.  
  371.    Ein String wird also stets durch eine Beschreibungszeile und eine
  372. unmittelbar darauffolgende Stringzeile angegeben. Ein Beispiel wäre
  373.          msgHello (/4/)
  374.          Hello, this is english!\n
  375.    In diesem Beispiel fehlt die ID, wird also vom Programm festgesetzt.
  376. (Dies ist sicher der einfachste und beste Weg.) Die 4 gibt hier an,
  377. daß der in der nächsten Zeile stehende String wenigstens 4 Zeichen
  378. enthalten soll, eine maximale Länge fehlt.
  379.  
  380.    Als ausführlicheres Beispiel zum Aufbau einer
  381. Katalogbeschreibungsdatei kann die Datei FlexCat.cd dienen.
  382.  
  383. Aufbau einer Katalogübersetzung
  384. *******************************
  385.  
  386.    Katalogübersetzungen entsprechen in ihrem Aufbau ganz und gar den
  387. Katalogbeschreibungen. Nur sind auf den Kommandozeilen andere Kommandos
  388. erlaubt und die Beschreibungszeilen enthalten keine Angaben über ID
  389. sowie minimale oder maximale Länge, da diese aus der
  390. Katalogbeschreibung entnommen werden. Selbstverständlich sollte jeder
  391. String aus der Katalogbeschreibung auch in der Katalogübersetzung
  392. vorkommen und es dürfen keine Strings (d.h. Stringbezeichner)
  393. auftauchen, die nicht auch in der Katalogbeschreibung definiert sind.
  394. Dies zu sichern geht am einfachsten, indem man mit FlexCat aus den
  395. evtl. geänderten Katalogbeschreibungen und den evtl. alten
  396. Katalogübersetzungen neue erzeugt. Siehe Uebersicht.
  397.  
  398.    Die in Katalogübersetzungsdateien erlaubten Kommandos sind:
  399. ##version <str>
  400.      Gibt die Version des Kataloges in Form eines
  401.      AmigaDOS-Versionsstrings an.  Beispiel:
  402.               ##version $VER: Deutsch.ct 8.1 (27.09.93)
  403.      Die Versionsnummer dieses Kataloges ist 8. Um ihn zu eröffnen,
  404.      müssten also in der Katalogbeschreibung die Versionsnummern 0 oder
  405.      8 angegeben werden.
  406.  
  407. ##language <str>
  408.      Gibt die Sprache des Kataloges an. Natürlich sollte dies eine
  409.      andere als die Sprache der Katalogbeschreibung sein. Die
  410.      Katalogsprache und die Katalogversion müssen angegeben werden.
  411.  
  412. ##codeset <num>
  413.      Ein derzeit noch unbenutztes Argument für die Eröffnung eines
  414.      Kataloges.  Sollte immer 0 sein. (Dies ist auch der Vorgabewert.)
  415.  
  416.    Das obige Beispiel sieht hier so aus:
  417.          msgHello
  418.          Hallo, dies ist deutsch!\n
  419.  
  420. Als weiteres Beispiel einer Katalogübersetzungsdatei kann
  421. Deutsch.ct dienen.
  422.  
  423. Aufbau einer Quelltextbeschreibung
  424. **********************************
  425.  
  426.    Der wichtigste Teil von FlexCat ist die Quelltexterzeugung. Bis
  427. hierher bietet FlexCat nichts, was nicht auch CatComp, KitCat und
  428. Konsorten bieten würden. Der erzeugte Quelltext soll nun die
  429. Verwendung der erzeugten Kataloge möglichst einfach machen.
  430. Andererseits soll dies aber unter beliebigen Programmiersprachen und
  431. für beliebige Anforderungen gelten. Um diese scheinbaren Widersprüche
  432. aufzulösen, kennt FlexCat die Quelltextbeschreibungen. Das sind
  433. Dateien, die gewissermaßen die Vorlage für den zu erzeugenden
  434. Quelltext bilden. Wie die Katalogbeschreibungen und -übersetzungen
  435. sind sie mit einem Editor erzeug- und bearbeitbar: Das ist es, was
  436. FlexCat so flexibel macht.
  437.  
  438.    FlexCat durchsucht die Quelltextbeschreibung nach gewissen Symbolen,
  439. die durch die in der Katalogbeschreibung gegebenen Werte ersetzt werden.
  440. Mögliche Symbole sind zum einen die mit einem Backslash eingeleiteten
  441. Steuerzeichen, die auch in den Strings der Katalogbeschreibung und der
  442. Katalogübersetzung erlaubt sind, zum anderen aber Steuerzeichen, die
  443. mit einem %-Zeichen beginnen: Für C-Programmierer ein wohlvertrautes
  444. Konzept. Mögliche Steuerzeichen sind:
  445.  
  446. %b
  447.      ist der Basisname der Quelltextbeschreibungsdatei. (Für
  448.      FlexCat.cd als CDFILE wäre also FlexCat der Basisname.
  449.      Wie schon erwähnt, kommt es deshalb beim Argument CDFILE sehr
  450.      wohl auf Groß-/Kleinschreibung an; siehe Programmstart)
  451.  
  452. %v
  453.      ist die Versionsnummer aus der Katalogbeschreibung, nicht zu
  454.      verwechseln mit dem Versionsstring aus der Katalogübersetzung.
  455.  
  456. %l
  457.      ist die Sprache der Katalogbeschreibung. Bitte beachten Sie, daß
  458.      hier ein String eingesetzt wird, dessen Aussehen mit dem Kommando
  459.      ##stringtype beeinflußt wird.
  460.  
  461. %n
  462.      ist die Anzahl der Strings in der Katalogbeschreibung.
  463.  
  464. %%
  465.      ist das Prozentzeichen selbst.
  466.  
  467.    Das wesentlichste sind aber die folgenden Steuerzeichen. Sie
  468. repräsentieren auf unterschiedliche Art und Weise die Strings der
  469. Katalogbeschreibung.  Zeilen die eines dieser Zeichen enthalten, werden
  470. von FlexCat für jeden Katalogstring wiederholt, da im Normalfall kaum
  471. alle Strings in eine Zeile passen würden.
  472.  
  473. %i
  474.      ist der Bezeichner aus der Katalogbeschreibung.
  475.  
  476. %d
  477.      ist die ID des Strings
  478.  
  479. %e
  480.      gibt an, um den wievielten String (Mit 0 beginnend) es sich
  481.      handelt.
  482.  
  483. %s
  484.      ist der String selbst; dieser wird in einer von der
  485.      Programmiersprache abhängigen Art und Weise dargestellt. Dies
  486.      kann mit den Kommandos ##stringtype und ##shortstrings
  487.      beeinflußt werden.
  488.  
  489. %(...)
  490.      gibt an, daß der zwischen den Klammern stehende Text bei allen
  491.      Strings außer dem letzten auftauchen soll. Dies ist z.B. bei
  492.      Arrays nützlich, wenn unterschiedliche Arrayeinträge durch ein
  493.      Komma getrennt werden sollen, nach dem letzten aber kein Komma
  494.      mehr kommen soll: Dann würde man nach dem Stringeintrag eben
  495.      %(,) schreiben. Beachten Sie, daß der Text zwischen den
  496.      Klammern nicht weiter auf %-Symbole untersucht wird.
  497.      Backslash-Sequenzen sind allerdings weiter erlaubt.
  498.  
  499.    Die Steuerzeichen %l und %s erzeugen Strings. Die Darstellung
  500. von Strings hängt natürlich von der Programmiersprache ab, für die
  501. Quelltext erzeugt werden soll. Deshalb können in die
  502. Quelltextbeschreibung ähnlich wie in der Katalogübersetzung Kommandos
  503. eingebaut werden. Diese müssen am Zeilenanfang stehen und jeweils eine
  504. eigene Zeile einnehmen. Die möglichen Kommandos sind:
  505. ##shortstrings
  506.      gibt an, daß lange Strings über mehrere Zeilen verteilt werden
  507.      dürfen.  Dies ist nicht in allen Programmiersprachen ohne
  508.      weiteres möglich und vor allem besonders stark von der
  509.      verwendeten Programmiersprache abhängig.  Deshalb werden
  510.      vorgabemäßig notfalls eben sehr lange Zeilen erzeugt.
  511.  
  512. ##stringtype <art>
  513.      gibt die Syntax der Strings an. Mögliche Arten sind:
  514.     None
  515.           Es werden keinerlei zusätzliche Zeichen erzeugt und
  516.           lediglich die Zeichen des Strings ausgegeben. Es ist keine
  517.           Ausgabe von Binärzeichen (das sind die mit dem Backslash
  518.           erzeugten Zeichen) möglich.
  519.  
  520.     C
  521.           erzeugt Strings gemäß den Regeln der Programmiersprache C,
  522.           d.h. die Strings werden links und rechts mit je einem
  523.           Anführungszeichen abgegrenzt. Falls Strings über mehrere
  524.           Zeilen verteilt werden, so werden die Zeilen bis auf die
  525.           letzte mit einem Backslash beendet. (Der Backslash ist
  526.           innerhalb von Makros nötig.) Steuerzeichen werden mit
  527.           \OOO ausgegeben.  Siehe C.
  528.  
  529.     Oberon
  530.           wie der Stringtyp bei C, allerdings wird kein Backslash bei
  531.           Zeilentrennung erzeugt, Siehe Oberon. Dieser Stringtyp wird
  532.           auch f"ur Modula-2 empfohlen.
  533.  
  534.     Assembler
  535.           Strings werden mit dc.b erzeugt und links und rechts mit
  536.           einem einfachen Anführungsstrich abgegrenzt. Binärzeichen
  537.           werden mit $XX erzeugt.  Siehe Assembler.
  538.  
  539.     E
  540.           Strings werden mit je einem ' umgeben. Mehrzeilihe Strings
  541.           werden durch ein '+' konkateniert. Binärzeichen win in C.
  542.  
  543.    Als Beispiel betrachten wir einen Auszug aus der
  544. Quelltextbeschreibungsdatei C_h.sd, die eine Include-Datei für die
  545. Programmiersprache C erzeugt:
  546.      ##stringtype C
  547.      ##shortstrings
  548.      
  549.      #ifndef %b_CAT_H    /*    Sicherstellen, daß Include-Datei    */
  550.      #define %b_CAT_H    /*    nur einmal verwendet wird.        */
  551.      
  552.      
  553.      #ifndef EXEC_TYPES_H        /*  Nötige andere Include-  */
  554.      #include <exec/types.h>     /*  Dateien einbinden.        */
  555.      #endif
  556.      #ifndef LIBRARIES_LOCALE_H
  557.      #include <libraries/locale.h>
  558.      #endif
  559.      
  560.      
  561.      /*  Prototypen    */
  562.      extern void Open%bCatalog(struct Locale *, STRPTR);
  563.      extern void Close%bCatalog(void);
  564.      extern STRPTR Get%bString(LONG);
  565.      
  566.      /*  Definitionen der Bezeichner und ihrer ID's              */
  567.      #define %i %d    /*  Diese Zeile wird für jeden Katalog-     */
  568.              /*  wiederholt.                 */
  569.      
  570.      #endif
  571.  
  572. Benutzung in eigenen Programmen
  573. *******************************
  574.  
  575.    Wie der Quelltext benutzt wird, hängt natürlich vom erzeugten
  576. Quelltext und damit von den jeweiligen Quelltextbeschreibungen ab.
  577. Siehe Source description. Es kann hier deshalb nur auf die mit FlexCat
  578. mitgelieferten Quelltextbeschreibungsdateien eingegangen werden.
  579.  
  580.    Alle diese Dateien sind so aufgebaut, daß das fertige Programm auf
  581. jeden Fall auch ohne die locale.library arbeitet. Allerdings muß es
  582. eine globale Variable LocaleBase (d.h. _LocaleBase für
  583. Assembler-Programmierer) geben und diese muß mit NULL oder durch
  584. einen Aufruf von Exec.OpenLibrary initialisiert sein. Im ersten Fall
  585. werden natürlich nur die eingebauten Strings aus der
  586. Katalogbeschreibung verwendet. Eine Ausnahme stellt die
  587. Quelltextbeschreibung C_c_V20.sd dar, die auch unter der Workbench
  588. 2.0 Lokalisierung ermöglicht, indem sie evtl. die locale.library
  589. durch die iffparse.library ersetzt.  (Diese Version benötigt dann
  590. auch eine Variable IFFParseBase für die das gleiche wie für
  591. LocaleBase gilt.) Siehe C. Als Programmierer benötigen Sie
  592. keinerlie Kenntnisse dieser Libraries, außer Sie wollen eigene
  593. Quelltextbeschreibungen erzeugen.
  594.  
  595.    Es gibt lediglich 3 Funktionen, die aufzurufen recht simpel ist:
  596.  
  597.  - : OpenCatalog (locale, language)
  598.      Diese Funktion versucht, einen Katalog zu eröffnen. Das Argument
  599.      locale ist ein Zeiger auf eine Locale-Struktur, language ein
  600.      Zeiger auf einen String, der den Namen der gewünschten Sprache
  601.      enthält.  Beide Argumente werden an die Locale-Funktion
  602.      OpenCatalog übergeben und sollten normalerweise immer NULL (bzw.
  603.      NIL) sein, da andernfalls die Voreinstellungen des Benutzers
  604.      überschrieben werden. Näheres ist in den AutoDocs nachzulesen.
  605.  
  606.      Hat der Benutzer als Vorgabesprachen etwa Deutsch und
  607.      Français eingestellt und der Basisname des Programms ist
  608.      XXX, so wird nacheinander nach folgenden Dateien gesucht:
  609.               PROGDIR:Catalogs/Deutsch/XXX.catalog
  610.               LOCALE:Catalogs/Deutsch/XXX.catalog
  611.               PROGDIR:Catalogs/Français/XXX.catalog
  612.               LOCALE:Catalogs/Français/XXX.catalog
  613.      Dabei ist PROGDIR: das aktuelle Directory des Programms. Die
  614.      Reihenfolge von PROGDIR: und LOCALE: kann evtl. vertauscht
  615.      werden, falls dadurch ein Requester wie Insert volume YYY
  616.      unterdrückt werden kann.
  617.  
  618.      OpenCatalog ist vom Typ void (für Modula2-Programmierer: Eine
  619.      Prozedur), liefert also kein Ergebnis.
  620.  
  621.  - : GetString (ID)
  622.      Diese Funktion liefert einen Zeiger auf den Katalogstring mit der
  623.      angegebenen Nummer. Die ID wird in der Katalogbeschreibung
  624.      definiert.  Es versteht sich von selbst, daß die Strings Eigentum
  625.      der locale.library sind und deshalb nicht verändert werden
  626.      dürfen.
  627.  
  628.      Ein Beispiel ist vielleicht nützlich. Im Beispiel aus der
  629.      Katalogbeschreibung wird der String msgHello definiert. Die
  630.      Quelltextbeschreibungen deklarieren nun eine Konstante
  631.      msgHello, der die ID repräsentiert.  Damit könnte der
  632.      String in C so ausgegeben werden:
  633.               printf("%s\n", GetString(msgHello));
  634.  
  635.  - : CloseCatalog (void)
  636.      Mit dieser Funktion wird der Katalog (das heißt das belegte RAM)
  637.      vor dem Programmende wieder freigegeben. Die Funktion kann
  638.      gefahrlos zu jeder Zeit aufgerufen werden, sogar wenn OpenCatalog
  639.      gar nicht aufgerufen wurde.
  640.  
  641. FlexCat-Quelltext in C-Programmen
  642. =================================
  643.  
  644.    Der C-Quelltext besteht aus zwei Teilen: Einer .c-Datei, die
  645. einfach übersetzt und mit dem Linker eingebunden wird und nicht weiter
  646. zu interessieren braucht und einer .h-Datei, die vom benutzenden
  647. Programm mit #include eingebunden wird. In ihr werden die ID's der
  648. Strings als Makro definiert.
  649.  
  650.    Dabei gibt es zwei unterschiedliche Versionen: C_c_V21.sd ist eine
  651. recht simple Version, die einfach die entsprechenden Funktionen der
  652. locale.library benutzt. Dementsprechend ist mit ihr Lokalisierung ab
  653. Workbench 2.1 möglich. Dagegen ersetzt C_c_V20.sd unter 2.0 evtl.
  654. die locale.library durch die iffparse.library. Das setzt allerdings
  655. voraus, daß das Programm eine Option Language besitzt, die die Wahl
  656. einer Sprache ermöglicht und deren Wert dann an OpenCatalog
  657. übergeben wird.  Unter 2.1 oder höher sollte diese Option nicht
  658. benutzt werden.
  659.  
  660.    Es wäre prinzipiell durchaus denkbar, auch eine dritte Version zu
  661. schreiben, die Lokalisierung sogar unter 1.3 ermöglicht, aber das habe
  662. ich nicht getan, da ich 1.3 nicht mehr unterstützen möchte.
  663.  
  664.    Um die FlexCat-Funktionen OpenCatalog und CloseCatalog von den
  665. gleichnamigen Locale-Funktionen zu unterscheiden und um theoretisch
  666. auch das gleichzeitige Eröffnen mehrerer Kataloge zu ermöglichen,
  667. tragen die FlexCat-Funktionen etwas geänderte Namen, nämlich
  668. OpenXXXCatalogCloseXXXCatalog und GetXXXString. Dabei ist
  669. XXX der Basisname aus der Quelltextbeschreibung. Das Konzept ist von
  670. der GadToolsBox übernommen und meines Erachtens bewährt. Siehe
  671. Source description.
  672.  
  673.    Die Prototypen der Funktionen sind:
  674.          void OpenXXXCatalog(struct Locale *loc, char *language);
  675.          STRPTR GetXXXString(ULONG);
  676.          void CloseXXXCatalog(void);
  677.  
  678.    Für ein Beispiel eines C-Programms mit FlexCat-Funktionen siehe
  679. Uebersicht.
  680.  
  681. FlexCat-Quelltext in C++-Programmen
  682. ===================================
  683.  
  684.    Unter C++ ist alles dank einer geeigneten Klasse extrem einfach:
  685. Durch Konstruktoren und Destruktoren wird das meiste automatisch
  686. erledigt. Diese Klasse ist in den Dateien C++_CatalogF.cc und
  687. C++_CatalogF.h implementiert, die in CatalogF.cc und
  688. CatalogF.h umbenannt und übersetzt werden sollten. Ferner
  689. sollten mit Hilfe der Quelltextbeschreibungen C++_cc.sd und
  690. C++_h.sd zwei weitere Dateien erzeugt werden: Erstere enthält
  691. die Strings, letztere wird mit #include im eigentlichen Programm
  692. eingebunden und enthält die nötigen Deklarationen.
  693.  
  694.    Abschließend ein Beispiel eines C++-Programms:
  695.          #include <iostream.h>
  696.          extern "C"
  697.          {
  698.          #include <clib/exec_protos.h>
  699.          }
  700.          #include "CatalogF.h"
  701.          #include "HelloLocalWorld_Cat.h"
  702.      
  703.          struct LocaleBase *LocaleBase = 0;
  704.      
  705.          int main()
  706.          { //  Die Library muß hier eröffnet werden, auch wenn der Compiler
  707.            //  das automatisch kann. Kein Aussteigen, falls die
  708.            //  Library nicht eröffnet werden kann: Dann werden einfach die
  709.            //  eingebauten Strings verwendet.
  710.            LocaleBase = (struct LocaleBase *) OpenLibrary("locale.library", 38);
  711.      
  712.            const CatalogF cat(0, 0, HelloLocalWorld_ARGS);
  713.      
  714.            cout >> cat.GetString(msgHelloLocalWorld);
  715.      
  716.            if (LocaleBase)
  717.            CloseLibrary(LocaleBase);
  718.          }
  719.    Für den gcc ist eine Modifikation der libauto.a verfügbar, die
  720. sogar die Eröffnung der Locale.library überflüssig macht.
  721.  
  722. FlexCat-Quelltext in Oberon-Programmen
  723. ======================================
  724.  
  725.    Es gibt zwei unterschiedliche Quelltextbeschreibungen:
  726. Oberon_V38.sd erzeugt Quelltext, der Locale.mod von Hartmut
  727. Goebel verwendet.  Der mit Oberon_V39.mod erzeugte Quelltext
  728. benötigt dagegen das beim AmigaOberon mitgelieferte Locale.mod.
  729.  
  730.    Die Prototypen der Funktionen sind:
  731.          XXX.OpenCatalog(loc: Locale.LocalePtr; language : ARRAY OF CHAR);
  732.          XXX.GetString(num: LONGINT): Exec.StrPtr;
  733.          XXX.CloseCatalog();
  734.  
  735. Dabei ist XXX jeweils der Basisname aus der Quelltextbeschreibung.
  736. Siehe Source description.
  737.  
  738.    Zum Schluß noch ein Beispiel eines Programms, das den von FlexCat
  739. erzeugten Quelltext verwendet:
  740.          MODULE HelloLocalWorld;
  741.      
  742.          IMPORT  x:=HelloLocalWorld_Cat; Dos;
  743.      
  744.          BEGIN
  745.            x.OpenCatalog(NIL, "");
  746.      
  747.            Dos.PrintF("%s\n", x.GetString(x.msgHello));
  748.      
  749.            (* Katalog wird beim Programmende automatisch *)
  750.            (* geschlossen.                               *)
  751.          END Irgendwas;
  752.  
  753. Flexcat-Quelltext in Modula-2-Programmen
  754. ========================================
  755.  
  756.    Wie Oberon unterstützt Modula-2 ein Modulkonzept, die
  757. Funktionsnamen sind also dieselben, werden aber aus unterschiedlichen
  758. Modulen übernommen.  Diese Module werden durch die
  759. Quelltextbeschreibungen Modula2Def.sd bzw. Modula2Mod.sd erzeugt,
  760. die an den M2Amiga-Compiler angepasst sind. Ausserdem ist es noetig,
  761. die Datei Locale.def durch die Datei OptLocaleL.def aus der
  762. FlexCat-Distribution zu ersetzen. Die Prototypen sind:
  763.  
  764.          PROCEDURE XXX.OpenCatalog(loc : ld.LocalePtr;
  765.                                    language : ARRAY OF CHAR);
  766.          PROCEDURE XXX.CloseCatalog();
  767.          PROCEDURE XXX.GetString(num : LONGINT) : ld.StrPtr;
  768.  
  769. Dabei ist XXX jeweils der Basisname aus der Quelltextbeschreibung.
  770. Siehe Source description.
  771.  
  772.    Zum Schlu"s noch ein Beispiel eines Programms, das den von FlexCat
  773. erzeugten Quelltext verwendet:
  774.          MODULE HelloLocalWorld;
  775.      
  776.          FROM HelloLocalWorld IMPORT OpenCatalog, CloseCatalog, GetString,
  777.                                      msgHello;
  778.          FROM Dos IMPORT Printf;
  779.      
  780.          BEGIN
  781.            HelloLocalWorld.OpenCatalog(NIL, "");
  782.      
  783.            Dos.PrintF("%s\n",
  784.                       HelloLocalWorld.GetString(HelloLocalWorld.msgHello));
  785.      
  786.            HelloLocalWorld.CloseCatalog;
  787.          END HelloLocalWorld;
  788.  
  789. FlexCat-Quelltext in Assembler-Programmen
  790. =========================================
  791.  
  792.    Es gibt Quelltextbeschreibungen für die Assembler von Aztec-C bzw.
  793. SAS/C.  Beide sind im wesentlichen identisch, vor allem der
  794. SAS-Assembler dürfte sich kaum von verbreiteten Assemblern
  795. unterscheiden. Es sollte also kein großes Problem sein, daraus eine
  796. eigene Quelltextbeschreibung zu machen.  Der Quelltext besteht aus zwei
  797. Teilen: Einer .asm- bzw.  .a-Datei, die einfach übersetzt und mit
  798. dem Linker eingebunden wird und nicht weiter zu interessieren braucht
  799. und einer .i-Datei, die vom benutzenden Programm mit include
  800. eingebunden wird. In ihr werden die ID's der Strings definiert.
  801.  
  802.    Um theoretisch auch das gleichzeitige Eröffnen mehrerer Kataloge zu
  803. ermöglichen, tragen die FlexCat-Funktionen etwas geänderte Namen,
  804. nämlich OpenXXXCatalogCloseXXXCatalog und GetXXXString. Dabei
  805. ist XXX der Basisname aus der Quelltextbeschreibung. Das Konzept ist
  806. von der GadToolsBox übernommen und meines Erachtens bewährt.  Siehe
  807. Source description.
  808.  
  809.    Die Funktionen liefern wie üblich das Ergebnis in d0 und sichern die
  810. Register d2-d7 und a2-a7. OpenCatalog erwartet seine Argumente in a0
  811. (Zeiger auf Locale-Struktur) und in a1 (Zeiger auf String mit zu
  812. verwendender Sprache). Wie schon erwähnt, sollten diese Argumente im
  813. Normalfall immer NULL sein. GetString erwartet in a0 einen Zeiger. Auf
  814. was er zeigt braucht ebenfalls nicht zu interessieren.
  815.  
  816.    Zum Schluß noch ein Beispiel eines Programms, das FlexCat verwendet.
  817.      *   HelloLocalWorld.asm
  818.      
  819.          include "HelloLocalWorld_Cat.i"
  820.              /*  Enthält xref OpenHelloLocalWorldCatalog usw.    */
  821.      
  822.          xref    _LVOOpenLibrary
  823.          xref    _LVOCloseLibrary
  824.          xref    _AbsExecBase
  825.      
  826.          dseg
  827.      LocNam: dc.b    "locale.library",0
  828.          dc.l    _LocaleBase,4        ; Dieser Name ist obligatorisch
  829.      
  830.          cseg
  831.      
  832.      main:    move.l    #38,d0            ; Locale eröffnen
  833.          lea    LocName,a1
  834.          move.l    _AbsExecBase.a6
  835.          jsr    _LVOOpenLibrary(a6)
  836.      *  KEIN Abbruch, falls OpenLibrary() nicht erfolgreich! (Natürlich nur,
  837.      *   wenn Locale-Funktionen nicht anderweitig benutzt werden.
  838.      
  839.          sub.l    a0,a0
  840.          sub.l    a1,a1
  841.          jsr    OpenHelloLocalWorldCatalog  ; Katalog eröffnen
  842.      
  843.          lea.l    msgHello,a0        ; Zeiger auf String holen
  844.          jsr    GetHelloLocalWorldString
  845.          jsr    PrintD0         ; und ausgeben
  846.      
  847.          jsr    CloseHelloLocalWorldCatalog ; Katalog schließen
  848.          move.l    _LocaleBase,a1        ; Locale evtl. schließen
  849.          move.l    a1,d0
  850.          beq    Ende
  851.          jsr    CloseLibrary
  852.      Ende:
  853.          rts
  854.          end
  855.  
  856. FlexCat-Quelltext in E-Programmen
  857. =================================
  858.  
  859.    E unterscheidet sich in einem Punkt wesentlich von anderen
  860. Programmiersprachen: Man kann Quelltexte nicht ueber mehrere Dateien
  861. verteilen und den erzeugten Code später linken. Die beste Lösung
  862. dieses Problems ist die Verwendung von EPP von Barry Wills. (Quellen:
  863. Aminet, Directory dev/e oder die Fish-Disks) Dies macht es möglich,
  864. die von FlexCat mit der Quelltextbeschreibung E21b.sd erzeugten
  865. Quelltexte mit einer einzigen Zeile einzubinden:
  866.          PMODULE 'xxx_cat'
  867.  
  868. wobei xxx der Basisname des Programms ist. Ohne EPP muß man die
  869. FlexCat-Quelltexte von Hand in den eigenen Quelltext einfügen. Dies
  870. muß nach der letzten Definition und vor der ersten Prozedur geschehen.
  871. Andernfalls wäre es nötig, mehr als eine Datei mit FlexCat zu erzeugen
  872. und einzufügen.
  873.  
  874.    Der erzeugte Quelltext enthält Funktionen get_xxx_string,
  875. open_xxx_catalog und close_xxx_catalog.  (Diese leicht
  876. modifizierten Namen erlauben die Verwendung mehrerer Kataloge in einem
  877. einzigen Programm.) Bitte beachten Sie, daß es (anders als in C zum
  878. Beispiel) nicht möglich ist, get_xxx_string vor open_xxx_string
  879. aufzurufen!
  880.  
  881.    Eine Datei HelloLocalWorld.e könnte unter Verwendung von EPP so
  882. aussehen:
  883.          /*    HelloLocalWorld.e   */
  884.      
  885.          PMODULE hellolocalworld_cat
  886.      
  887.          PROC main()
  888.      
  889.          /*    Locale.library eröffnen;            */
  890.          /*    Kein Abbruch, falls nicht vorhanden!    */
  891.          localebase := OpenLibrary('locale.library', 0)
  892.      
  893.          /*    Katalog eröffnen                */
  894.          open_hellolocalworld_catalog(NIL, NIL)
  895.      
  896.          WriteF('\s\n', get_hellolocalworld_string(MSG_HELLO_WORLD))
  897.      
  898.          close_hellolocalworld_catalog()
  899.          ENDPROC
  900.  
  901. Weiterentwicklung des Programms
  902. *******************************
  903.  
  904.    Ich beabsichtige eigentlich nicht, das Programm wesentlich
  905. weiterzuentwickeln, denke auch nicht, daß das nötig sein wird, bin
  906. aber natürlich trotzdem für jegliche Anregung, Vorschläge oder
  907. notfalls auch Kritik offen. Was ich auf jeden Fall gerne machen werde,
  908. sind andere Stringtypen, falls sich diese für andere
  909. Programmiersprachen als notwendig erweisen sollten.
  910.  
  911.    Ferner wäre ich auf jeden Fall dankbar für weitere
  912. Quelltextbeschreibungen und würde diese gerne in einer späteren
  913. Version öffnetlich zugänglich machen - egal, welche
  914. Programmiersprache oder mit welchen Erweiterungen.  Voraussetzung ist
  915. natürlich, daß der von diesen Quelltextbeschreibungen erzeugte Code
  916. in einem laufenden Programm erfolgreich erprobt wurde.
  917.  
  918.    Ebenso dankbar wäre ich natürlich auch für neue Kataloge. Es
  919. genügt der Eintrag der entsprechenden Strings in der Datei
  920. NewCatalogs.ct.  Wie das geht, sollte nach der Lektüre dieser
  921. Dokumentation hoffentlich klar sein.
  922.  
  923. Danksagungen
  924. ************
  925.  
  926.    Danken möchte ich:
  927.  
  928. Albert Weinert
  929.      für KitCat, den Vorgänger von FlexCat, der mir gute Dienste
  930.      geleistet hat, aber irgendwann eben nicht flexibel genug war.
  931.  
  932. Reinhard Spisser und Sebastiano Vigna
  933.      für die Amiga-Version von texinfo, mit der diese Dokumentation
  934.      geschrieben ist.
  935.  
  936. Der Free Software Foundation
  937.      für die Urversion von texinfo und für viele andere hervorragende
  938.      Programme.
  939.  
  940. Matt Dillon
  941.      für DICE und besonders für DME.
  942.  
  943. Alessandro Galassi
  944.      für den italienischen Katalog.
  945.  
  946. Lionel Vintenat
  947.      für die E-Quelltextbeschreibung und ihre Dokumentation, den
  948.      französichen Katalog und Fehlermeldungen.
  949.  
  950. Antonio Joaquín Gomez Gonzalez (u0868551@oboe.etsiig.uniovi.es) für
  951.      die C++-Quelltextbeschreibung, den spanischen Katalog, die
  952.      Übersetzung der Dokumentation in Spanisch sowie für den guten Tip
  953.      über die schnellere GetString-Routine.
  954.  
  955. Olaf Peters (op@hb2.maus.de) for the Modula-2 source description
  956. Den Leuten von #AmigaGer
  957.      für die Beantwortung vieler dummer Fragen und für viele
  958.      Augenblicke erfreulich ungezügelten Schwachsinns :-), z.B.
  959.      stefanb (Stefan Becker), PowerStat (Kai Hoffmann), \ ill (Markus
  960.      Illenseer), Quarvon (Jürgen Lang), ZZA (Bernhard Möllemann),
  961.      Tron (Mathias Scheler), mungo (Ignatios Souvlatzis), \ jow
  962.      (Jürgen Weinelt) und Stargazer (Petra Zeidler).
  963.  
  964. Commodore
  965.      für den Amiga und für die Kickstart 2.0 :-) Macht weiter mit der
  966.      Kiste, dann bin ich vielleicht auch die nächsten 8 Jahre
  967.      Amiga-Benutzer!
  968.  
  969. Index
  970. *****
  971.  
  972.  
  973.  
  974.  Übersicht                             Uebersicht
  975.  .cd                                    Catalog description
  976.  .ct                                    Catalog translation
  977.  .sd                                    Source description
  978.  Adresse                                Copyright
  979.  Ascii-Code                             Catalog description
  980.  Assembler                              Assembler
  981.  Autor                                  Copyright
  982.  AztecAs_asm.sd                         Assembler
  983.  AztecAs_i.sd                           Assembler
  984.  Beiträge                              Zukunft
  985.  Benutzung                              Benutzung
  986.  C                                      C
  987.  C++                                    C++
  988.  C++_CatalogF.cc                        C++
  989.  C++_CatalogF.h                         C++
  990.  C++_cc.sd                              C++
  991.  C++_h.sd                               C++
  992.  Catalog description                    Catalog description
  993.  Catalog translation                    Catalog translation
  994.  Compiler                               Uebersicht
  995.  Copyright                              Copyright
  996.  C_c_V20.sd                             C
  997.  C_c_V21.sd                             C
  998.  C_h.sd                                 C
  999.  Danksagungen                           Danksagungen
  1000.  Deutsch.ct                             Catalog translation
  1001.  Distribution                           Copyright
  1002.  E                                      E
  1003.  E21b.sd                                E
  1004.  E21b_defs.sd                           E
  1005.  E21b_procs.sd                          E
  1006.  EPP                                    E
  1007.  FlexCat.cd                             Catalog description
  1008.  Genehmigungen                          Copyright
  1009.  Installation                           Installation
  1010.  Internet                               Copyright
  1011.  Katalogübersetzung                    Catalog translation
  1012.  Katalogbeschreibung                    Catalog description
  1013.  Mail                                   Copyright
  1014.  Modula-2                               Modula-2
  1015.  Modula2Def.sd                          Modula-2
  1016.  Modula2Mod.sd                          Modula-2
  1017.  Oberon                                 Oberon
  1018.  Oberon_V38.sd                          Oberon
  1019.  Oberon_V39.sd                          Oberon
  1020.  OptLocaleL.def                         Modula-2
  1021.  Programmiersprache                     Uebersicht
  1022.  Quelltextbeschreibung                  Source description
  1023.  Rechtliche Dinge                       Copyright
  1024.  SASasm_a.sd                            Assembler
  1025.  SASasm_i.sd                            Assembler
  1026.  Source description                     Source description
  1027.  Steuerzeichen                          Catalog description
  1028.  Systemanforderungen                    Installation
  1029.  Verbote                                Copyright
  1030.  Weiterentwicklung                      Zukunft
  1031.  Zukunft                                Zukunft
  1032.  
  1033.